/*
 * Copyright 2011 Katsunori Koyanagi
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package sweezy.core.reflect
{
	import flash.system.ApplicationDomain;

	public interface IType extends IMetadataSupport
	{

		function get applicationDomain():ApplicationDomain;

		function get className():String;

		function get constructor():IConstructor;

		function get extendsClasses():Array;

		function getMethod(name:String, isStatic:Boolean, uri:String = null):IMethod;

		function getMethods(filter:Function):Array;

		function getProperties(filter:Function):Array;

		function getProperty(name:String, isStatic:Boolean, uri:String = null):IProperty;

		function get implementsInterfaces():Array;

		function isAssignableFrom(type:IType):Boolean;

		function get isInterface():Boolean;

		function get methods():Array;

		function newInstance(args:Array = null):*;

		function get packageInfo():IPackageInfo;

		function get properties():Array;

		function get rawClass():Class;

		function get shortName():String;

		function get superClass():IType;
	}
}
